Data Quality control for high content screenings before EM

This data assay is related to the project Phenotypic screen of Golgi apparatus by Automation of FIB/SEM.

Images are from Hela Kyoto cells tagged with GFP on GalNAc-T2, fluorescent Golgi apparatus on green channel. DAPI staining of nuclei is on blue channel.

Cells were transfected via spotting on top of MatTek glass bottom 2ml. dishes. MatTek dishes in a concentration of 100.000 cells/ml.

It is divided into 4 sections :

1) Data Loading and preprocessing : Data is loaded using the loadData function and quality controls are applied on the images.

2) Plot images: Random images of the full assay are shown. General features are plotted.

3) Select cells based on features, PCA or tSNE: Selection of images (Which images where selected to be acquired by EM?) with corresponding names and a folder with individual crops. This can be done by plotting a feature or by other clustering technique like PCA or tSNE

PART 1 : Data loading and preprocessing

Data for each experiment is saved as the data followed by the suffix “_automation”. For each experiment data is stored in two separate folders, one containing all the images of the screening from the selected cells, and other with suffix “--cp” containing all the images from the pre-scanning of the spots with additional files containing comma separated values with information about the images.

Image features and metadata is extracted using a CellProfiler Pipeline v 2.2 (in the same folder). The CellProfiler pipeline first segmented the cells and then it extracted features from each identified Golgi region in the green channel. Cell position was identified from the nucleus associated to each cell.

loadData searches for a folder with "--cp" extension and inside searches for the files generated by the pipeline. Information is merged in a unique dataframe that will be used during the full experiment, a table structure where each column represent a feature and each row a cell found in the images.

In [1]:
%load_ext autoreload
%autoreload 2
from validation_pipeline import *

# Folder where the automation data is. The folder should look something like date+_automation
#     - It will merge together all the data tables from Cell Profiler. Be sure that your output folder has the name --cp
#     - It will also generate crops of every cell ready for the plots. 
df = loadData(regenerate_crops = True, no_treatments=False)
712it [01:00, 11.84it/s]
-- DATA on Z:\lleti\AUTOCLEM\19112018_automation_spots LOADED --
In [2]:
import pandas as pd
import numpy as np
from validation_pipeline import plotQC, applyQC
from bokeh.io import output_notebook
output_notebook()
Loading BokehJS ...
In [3]:
## START HERE IF YOU WANT TO REPEAT THE CONTROLS
df_qc = df.copy()
In [4]:
df.head()
Out[4]:
Metadata_BaseFileName FileName_ColorImage Location_Center_X Location_Center_Y Mean_Golgi_AreaShape_Center_X Mean_Golgi_AreaShape_Center_Y Mean_Nuclei_AreaShape_Solidity Metadata_U Metadata_V Metadata_X ... ImageQuality_PowerLogLogSlope_Dna Intensity_IntegratedIntensity_GolgiBGCorr Mean_Nuclei_Math_CV Math_Blobness Math_Diffuseness Children_Golgi_Count Mean_MaxAreaGolgi_AreaShape_FormFactor Gene img_name img_name_raw
0 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 350.922497 362.971169 326.0 368.000000 0.942648 0 0 0 ... -2.064888 -22.980992 0.252748 0.685960 0.000000 4 1.028480 COPB2 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 425.037458 29.760527 390.0 29.000000 0.938491 0 0 0 ... -1.770683 282.194320 0.161452 0.399064 0.654652 1 0.691705 WDR75 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
2 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 629.501120 115.269355 630.5 118.500000 0.901548 0 0 0 ... -1.770683 329.140597 0.156980 0.692044 0.594165 2 0.657620 WDR75 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 135.363458 655.385724 159.0 657.000000 0.937209 0 0 0 ... -1.770683 25.308624 0.264223 0.424735 0.000000 1 0.225209 WDR75 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
4 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 208.868795 368.319484 215.0 382.666667 0.960549 0 0 0 ... -2.015333 -106.373929 0.279456 0.621299 0.000000 3 0.408399 DNM1 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...

5 rows × 21 columns

In [5]:
import os
from ipywidgets import widgets, HBox,Label,Button
%gui qt

get_ipython().enable_gui("qt")

bs = Button( description='Show selected',tooltip='Show in viewer',)

dfolder =  os.getcwd() # os.getcwd()+'\\4927--cp\\images\\'

QUALITY CONTROL 1 : QUALITY OF FOCUS

Select the lowest number where you still can see a Golgi in focus. (-2.2 to inf)

  • PowerLogLogSlope of DNA- Removing cells out of focus. Based on metrics from M.-A. Bray, A. N. Fraser, T. P. Hasaka, and A. E. Carpenter, “Workflow and Metrics for Image Quality Control in Large-Scale High-Content Screens,” J. Biomol. Screen., vol. 17, no. 2, pp. 266–274, Feb. 2012., this feature present on CellProfiler removes potential out of focus cells. http://cellprofiler.org/manuals/current/MeasureImageQuality.html

Values are between -2.2 to 100. A common value is -2.2. Values below -2.2 are removed.

In [7]:
mplot, selection_stream = plotQC(df_qc, "ImageQuality_PowerLogLogSlope_Dna","Focus_Quality", size = 8)

def openVisor(bval):
    images_list = [ df_qc.at[i,'img_name_raw'] for i in selection_stream.index]
    images_values = [ str(df_qc.at[i,'ImageQuality_PowerLogLogSlope_Dna']) for i in selection_stream.index]
    if len(images_list)>0:
        %run -i visorOk.py --listImages $images_list --folder $dfolder --listIndex $selection_stream.index --listValues $images_values

bs.on_click(openVisor)
display(widgets.HBox([bs]))
mplot
Out[7]:

TYPE DOWN HERE YOUR RESULT for FOCUS QUALITY:

In [8]:
### WRITE HERE
from ipywidgets import widgets, HBox,Label
### TYPE DOWN HERE YOUR RESULT for detecting artifacts or apoptosis:
# displaying the text widget
qc_focus_quality = widgets.FloatText(width=300)
hb = HBox([Label('Insert here value for Focus quality:'),qc_focus_quality])
display(hb)

def handle_submit_1(sender):
    print("You selected the value :"+str(qc_focus_quality.value))  
    return

qc_focus_quality.observe(handle_submit_1,'value')
You selected the value :-2.1
In [9]:
df_qc = applyQC(df_qc, "ImageQuality_PowerLogLogSlope_Dna",vmin= qc_focus_quality.value)
QC for ImageQuality_PowerLogLogSlope_Dna
Values applied :[-2.1,inf].
Original number of cells:712
After applying control ImageQuality_PowerLogLogSlope_Dna :708
---QC ImageQuality_PowerLogLogSlope_Dna done.

QUALITY CONTROL 2 : Nuclei coefficient of variation

Select the highest value where you still can see a cell which is not apoptotic, mitotic cell or an artifact. (0-0.4)

Mean Nuclei CV – Coefficient of variation of the intensity. Usually is around 0.4 as maximum. Cells that have more than value are removed.

In [10]:
mplot, selection_stream = plotQC(df_qc, "Mean_Nuclei_Math_CV","Nuclei_Variation")
display(widgets.HBox([bs]))
mplot
Out[10]:
In [11]:
### WRITE HERE
from ipywidgets import widgets, HBox,Label
### TYPE DOWN HERE YOUR RESULT for detecting artifacts or apoptosis:
# displaying the text widget
qc_apo = widgets.FloatText(width=300)
hb = HBox([Label('Insert here value to remove apoptotic shapes:'),qc_apo])
display(hb)
def handle_submit_2(sender):
    print("You selected the value :"+str(qc_apo.value))   
    return

qc_apo.observe(handle_submit_2,'value')
You selected the value :0.48
In [12]:
if qc_apo.value: 
    df_qc = applyQC(df_qc, "Mean_Nuclei_Math_CV",vmax= float(qc_apo.value))
QC for Mean_Nuclei_Math_CV
Values applied :[-inf,0.48].
Original number of cells:708
After applying control Mean_Nuclei_Math_CV :690
---QC Mean_Nuclei_Math_CV done.

QUALITY CONTROL 3 : REMOVE cells with dimmest signal

Select the lowest value where you still can see a Golgi (30, inf)

Potential Mitotic cells- Integrated Intensity of Golgi background. Images which correlation values with the background are very close are removed. Range allowed was anything bigger than 30.

In [13]:
plotqc,selection_stream = plotQC(df_qc, "Intensity_IntegratedIntensity_GolgiBGCorr","Background_intensity")
display(widgets.HBox([bs]))
plotqc
Out[13]:
In [14]:
### TYPE DOWN HERE YOUR RESULT for remove low background cells:
### WRITE HERE
from ipywidgets import widgets, HBox,Label
qc_bg = widgets.FloatText(width=300)
hb = HBox([Label('Insert here value for Mitotic cells:'),qc_bg])
display(hb)
def handle_submit(sender):
    print("You selected the value :"+str(qc_bg.value))   
    return

qc_bg.observe(handle_submit,'value')
You selected the value :-600.0
In [15]:
# Allowed range: 30 .. 1e+09 and not NA.
df_qc = applyQC(df_qc, "Intensity_IntegratedIntensity_GolgiBGCorr",vmin= qc_bg.value, vmax = 2000)
QC for Intensity_IntegratedIntensity_GolgiBGCorr
Values applied :[-600.0,2000].
Original number of cells:690
After applying control Intensity_IntegratedIntensity_GolgiBGCorr :689
---QC Intensity_IntegratedIntensity_GolgiBGCorr done.

END CONTROLS

In [16]:
# CHECKPOINT 1: Execute this if you want to start from this point again. 
df = df_qc
print(len(df))
689

PART 2 : Check images from positive controls

In [17]:
from ipywidgets import Button, HBox, VBox
# First provide a dictionary with the names of the genes. It will be easy to identify by name than by number
genes = dict({'ACTR3': [10, 17],
 'ARHGAP44': [15, 25],
 'AURKB': [31],
 'C1S': [4, 19],
 'COPB1': [24],
 'COPB2': [0],
 'COPG1': [3],
 'DENND4C': [5, 30],
 'DNM1': [2, 12],
 'FAM177B': [9, 23],
 'GPT': [27, 29],
 'IPO8': [6, 20],
 'KIF11': [28],
 'NT5C': [13, 22],
 'Neg9': [8, 16, 26],
 'PTBP1': [11, 14],
 'SRSF1': [7, 18],
 'WDR75': [1, 21]})
list_genes = []
def on_button_clicked(b):
    print("You selected: "+b.description)
    list_genes.append(b.description)
    
words = genes.keys()
items = [Button(description=w, tooltip=w) for w in words]
for b in items:
    b.on_click(on_button_clicked)
leftb = VBox(items[0:int(len(items)/2)])
rightb = VBox(items[int(len(items)/2):len(items)])

print('Select controls.')
HBox([leftb,rightb])
Select controls.
You selected: Neg9
You selected: KIF11
You selected: AURKB
You selected: COPB1
In [18]:
%reload_ext autoreload
%autoreload 2
import cv2
import re
from validation_pipeline import findImagesGene
from matplotlib import pyplot as plt

import os

def plot_treatment(genes,list_genes):
    positive_controls = list_genes
    # For this we have to provide the folder where the data of the prescan is. 
    folder_data = os.getcwd()

    loi = findImagesGene(df,folder_data,genes,positive_controls)

    for gene in loi.keys():
        m_files = loi[gene]
        fig = plt.figure(figsize=(20,25))
        total = int(len(m_files)/2)+1
        fig.suptitle(gene) 
        for i,mfile in enumerate(m_files): 
            img = cv2.imread(mfile)
            if img is not None:        
                b,g,r = cv2.split(img)       # get b,g,r
                rgb_img = cv2.merge([r,g,b])
                ax = fig.add_subplot(total, 2, i + 1, xticks=[], yticks=[])
                ax.imshow(np.squeeze(rgb_img))
In [19]:
plot_treatment(genes,list_genes)

END part 2

PART 3: PLOT FEATURES

There is a total of 4 features : tubularity, diffusivity, fragmentation and condensation. The idea is that phenotypes show always one extreme difference on one of the features or a mixture of two of them, enough to be differentiated between phenotypes.

From the original data coming from a CellProfiler Pipeline, Blobness corresponds to tubularity, Diffusseness to diffusivity, Children_Golgi_Count to Fragmentation and Mean_MaxAreaGolgi_AreaShape_FormFactor to condensation.

In [23]:
# RENAME of Features and data conditioning needed is done here

# This prepares the data for feature inspection with nicer names
df.loc[:,'Children_Golgi_Count']=df.loc[:,'Children_Golgi_Count'].astype(int)
# Conversion needed because by default is read as an string.

from validation_pipeline import getZscoreAgainstControl
# STEP 1. NORMALIZATION PER GENE against NEGATIVE CONTROL
df_features_gene = df[['Math_Blobness', 'Math_Diffuseness', 'Children_Golgi_Count',
        'Mean_MaxAreaGolgi_AreaShape_FormFactor','Gene','Mean_Nuclei_AreaShape_Solidity']]

df_features_gene_norm = getZscoreAgainstControl(df_features_gene,hue='Gene',control=['Neg9'],remove_outliers=False, drop_index = False)
df_features_gene_norm = df_features_gene_norm[['index','Math_Blobness_zscore', 'Math_Diffuseness_zscore', 'Children_Golgi_Count_zscore',
        'Mean_MaxAreaGolgi_AreaShape_FormFactor_zscore','Mean_Nuclei_AreaShape_Solidity_zscore','Gene']]

df_features_gene_norm.columns = ['index',"Tubular","Diffuse","Fragmented","Condensed","Nuc_Solidity","Gene"]
print(len(df_features_gene_norm))
df_features_gene_norm.head(10)
689
Out[23]:
index Tubular Diffuse Fragmented Condensed Nuc_Solidity Gene
0 0 0.711392 0.102062 0.134934 4.084416 -0.354914 COPB2
0 1 -2.205737 6146.042715 -1.267415 1.923043 -0.477225 WDR75
1 2 0.773254 5578.187261 -0.799965 1.704291 -1.564122 WDR75
2 3 -1.944717 0.102062 -1.267415 -1.070851 -0.514928 WDR75
3 60 -0.512661 0.102062 -0.332516 -0.442724 -0.885028 WDR75
4 61 0.315218 0.102062 0.134934 1.087274 -0.182362 WDR75
5 62 1.088766 0.102062 -0.332516 0.187426 -0.535563 WDR75
6 63 -0.411726 0.102062 -0.332516 -0.544101 0.331989 WDR75
7 64 -1.289300 0.102062 -0.799965 -0.503947 0.247500 WDR75
8 65 0.148704 0.102062 0.602383 2.023116 0.379492 WDR75

Plot treatment features versus negative control

In [21]:
from ipywidgets import Button, HBox, VBox

list_genes = []
def on_button_clicked(b):
    print("You selected the gene: "+b.description)
    list_genes.append(b.description)
    
words = genes.keys()
items = [Button(description=w, tooltip=w) for w in words]
for b in items:
    b.on_click(on_button_clicked)
    
    
leftb = VBox(items[0:int(len(items)/2)])
rightb = VBox(items[int(len(items)/2):len(items)])
HBox([widgets.Label(value="Select Treatments to plot:  "),leftb,rightb])
You selected the gene: COPG1
You selected the gene: WDR75
In [24]:
import pylab as Plot
import pandas as pd
import matplotlib.patches as mpatches
import seaborn as sns
from validation_pipeline import nlcmap

def strip_plot_features(iXz, iXz_control,isize=20,columns=["Tubular","Diffuse","Fragmented","Condensed","Nuc_Solidity"],tags=['Phenotype','Control']):
    # sns.set_style("whitegrid")
    Xz = iXz[columns]   
    if iXz_control is not None:
        Xz_control = iXz_control[columns]
        Xz_control = pd.melt(Xz_control)
        Xz = pd.melt(Xz)
        Xz.loc[:,'Type'] = tags[0]
        Xz_control.loc[:,'Type']=tags[1]
        my_df_t = pd.concat([Xz,Xz_control])  
       
        ax = sns.stripplot(x='variable',y='value',hue='Type',edgecolor='black',linewidth=1,data=my_df_t,palette = ["#e74c3c","#3498db"],dodge=True, jitter=0.25, alpha=0.25, size=isize)
        ax.axes.set_xlim(-1, 5)
        classes = tags
        class_colours =  ["#e74c3c","#3498db"]
        recs = []
        for i in range(0, len(class_colours)):
            recs.append(mpatches.Rectangle((0, 0), 1, 1, fc=class_colours[i]))
        Plot.legend(recs, classes, loc=4)
        return ax
    else:
        ax = sns.stripplot(data=Xz, jitter=True, alpha=0.25, size=isize)
        ax = sns.violinplot(data=Xz, inner = None, color = ".9")
    # sns.despine()
    # distance across the "X" or "Y" stripplot column to span, in this case 40%
    median_width = 0.4

    for tick, text in zip(ax.get_xticks(), ax.get_xticklabels()):
        sample_name = text.get_text()  # "X" or "Y"
        median_val = Xz[sample_name].median()
        # plot horizontal lines across the column, centered on the tick
        ax.plot([tick - median_width / 2, tick + median_width / 2], [median_val, median_val],
                lw=4, color='k')

    #Plot.show()
    #Plot.close()
    return ax

def getFeatures(idf_features,gene):
    features_pheno = idf_features.query('Gene==\''+gene+'\'').copy()
    features_pheno = features_pheno[["Tubular","Diffuse","Fragmented","Condensed","Nuc_Solidity"]]
    return features_pheno

features_c = getFeatures(df_features_gene_norm,'Neg9')
Plot.rcParams['figure.figsize'] = (15, 8)

fig, ax = plt.subplots(len(list_genes), 0) 

for ind,gene in enumerate(list_genes):
    features_p = getFeatures(df_features_gene_norm,gene)
    if len(list_genes)>1:
        ax[ind]= strip_plot_features(features_p, features_c,isize=5,columns=["Tubular","Diffuse","Fragmented","Condensed","Nuc_Solidity"],tags=[gene,'CONTROL'])
    else:
        ax= strip_plot_features(features_p, features_c,isize=5,columns=["Tubular","Diffuse","Fragmented","Condensed","Nuc_Solidity"],tags=[gene,'CONTROL'])
    Plot.show()
In [25]:
df = df.reset_index(drop=False)
res = df_features_gene_norm.join(df,on='index',rsuffix='_right')
res= res.drop(columns=['index','index_right', 'Gene_right'])
print("Total cells so far:"+str(len(res)))
res.head()
Total cells so far:689
Out[25]:
Tubular Diffuse Fragmented Condensed Nuc_Solidity Gene Metadata_BaseFileName FileName_ColorImage Location_Center_X Location_Center_Y ... Metadata_Y ImageQuality_PowerLogLogSlope_Dna Intensity_IntegratedIntensity_GolgiBGCorr Mean_Nuclei_Math_CV Math_Blobness Math_Diffuseness Children_Golgi_Count Mean_MaxAreaGolgi_AreaShape_FormFactor img_name img_name_raw
0 0.711392 0.102062 0.134934 4.084416 -0.354914 COPB2 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 350.922497 362.971169 ... 0 -2.064888 -22.980992 0.252748 0.685960 0.000000 4 1.028480 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
0 -2.205737 6146.042715 -1.267415 1.923043 -0.477225 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 425.037458 29.760527 ... 1 -1.770683 282.194320 0.161452 0.399064 0.654652 1 0.691705 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
1 0.773254 5578.187261 -0.799965 1.704291 -1.564122 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 629.501120 115.269355 ... 1 -1.770683 329.140597 0.156980 0.692044 0.594165 2 0.657620 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
2 -1.944717 0.102062 -1.267415 -1.070851 -0.514928 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 135.363458 655.385724 ... 1 -1.770683 25.308624 0.264223 0.424735 0.000000 1 0.225209 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
3 -0.512661 0.102062 -0.332516 -0.442724 -0.885028 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 460.323377 84.007421 ... 21 -1.870710 -332.045122 0.170843 0.565576 0.000000 3 0.323081 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...

5 rows × 26 columns

In [26]:
#CHECKPOINT 2 : Execute this if you want to restart from here.
final = res.copy()

Delete non-wanted treatments

In [27]:
from ipywidgets import Button, HBox, VBox

list_genes = []
def on_button_clicked(b):
    print("You selected the gene: "+b.description)
    list_genes.append(b.description)
    
words = genes.keys()
items = [Button(description=w, tooltip=w) for w in words]
for b in items:
    b.on_click(on_button_clicked)
    
    
leftb = VBox(items[0:int(len(items)/2)])
rightb = VBox(items[int(len(items)/2):len(items)])
HBox([widgets.Label(value="Select Genes to delete:  "),leftb,rightb])
You selected the gene: AURKB
You selected the gene: KIF11
In [28]:
list_ind = []
for el in list_genes:
    final = final[final.Gene!=el]
    print("Deleted treatment :"+el)
Deleted treatment :AURKB
Deleted treatment :KIF11
In [29]:
final = final.reset_index(drop=True)  #### VERY IMPORTANT
In [30]:
final.head(10)
Out[30]:
Tubular Diffuse Fragmented Condensed Nuc_Solidity Gene Metadata_BaseFileName FileName_ColorImage Location_Center_X Location_Center_Y ... Metadata_Y ImageQuality_PowerLogLogSlope_Dna Intensity_IntegratedIntensity_GolgiBGCorr Mean_Nuclei_Math_CV Math_Blobness Math_Diffuseness Children_Golgi_Count Mean_MaxAreaGolgi_AreaShape_FormFactor img_name img_name_raw
0 0.711392 0.102062 0.134934 4.084416 -0.354914 COPB2 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 350.922497 362.971169 ... 0 -2.064888 -22.980992 0.252748 0.685960 0.000000 4 1.028480 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
1 -2.205737 6146.042715 -1.267415 1.923043 -0.477225 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 425.037458 29.760527 ... 1 -1.770683 282.194320 0.161452 0.399064 0.654652 1 0.691705 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
2 0.773254 5578.187261 -0.799965 1.704291 -1.564122 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 629.501120 115.269355 ... 1 -1.770683 329.140597 0.156980 0.692044 0.594165 2 0.657620 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
3 -1.944717 0.102062 -1.267415 -1.070851 -0.514928 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 135.363458 655.385724 ... 1 -1.770683 25.308624 0.264223 0.424735 0.000000 1 0.225209 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
4 -0.512661 0.102062 -0.332516 -0.442724 -0.885028 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 460.323377 84.007421 ... 21 -1.870710 -332.045122 0.170843 0.565576 0.000000 3 0.323081 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
5 0.315218 0.102062 0.134934 1.087274 -0.182362 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 563.453406 157.806721 ... 21 -1.870710 -347.508848 0.187191 0.646997 0.000000 4 0.561479 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
6 1.088766 0.102062 -0.332516 0.187426 -0.535563 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 490.074365 208.735788 ... 21 -1.870710 -355.397280 0.185744 0.723074 0.000000 3 0.421269 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
7 -0.411726 0.102062 -0.332516 -0.544101 0.331989 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 626.815323 247.710185 ... 21 -1.870710 -350.010025 0.169717 0.575503 0.000000 3 0.307285 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
8 -1.289300 0.102062 -0.799965 -0.503947 0.247500 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 540.777735 286.995202 ... 21 -1.870710 -340.374533 0.191925 0.489194 0.000000 2 0.313542 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
9 0.148704 0.102062 0.602383 2.023116 0.379492 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 526.217674 401.402233 ... 21 -1.870710 -345.024534 0.184475 0.630620 0.000000 5 0.707298 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...

10 rows × 26 columns

Functions for cell selection based on features (simply run)

In [31]:
# Some functions needed for later
def save_images(df):
    # For this we have to provide the folder where the data of the prescan is. 
    os.mkdir(".\\selected")
    data_folder = os.getcwd()
    images_dir = data_folder 
    df = df.reset_index(drop=True)
    total = int(len(df)/2)+1
    fig = plt.figure(figsize=(30,total*10))       
    k = 0
    for i in range(len(df)):
        mfile = images_dir+'\\'+df.at[i,"img_name_raw"]
        name_or = df.at[i,"Metadata_BaseFileName"]
        name = str(i)+"_"+str(df.at[i,"Gene"]+"_"+name_or)
        img = cv2.imread(mfile)
        b,g,r = cv2.split(img)       # get b,g,r
        rgb_img = cv2.merge([r,g,b])
        if img is not None:           
                ax = fig.add_subplot(total, 2, k + 1, xticks=[], yticks=[])
                rgb_img2 =  cv2.merge([b,g,r])
                ax.imshow(np.squeeze(rgb_img))
                cv2.imwrite(".\\selected\\"+name+".tif",np.squeeze(rgb_img2))
                k = k+1
In [32]:
### Parameters to plot
cell_indexes_final = []
size_dot = 5 
separation_dots = 0.4 # jitter
cells_random = 20 # cells to select randomly from the button add random
In [33]:
def openVisor(bval):
        images_list = [ final_tmp.at[final_tmp.index[i],'img_name_raw'] for i in selection_stream.index]
        images_values = [ str(final_tmp.at[final_tmp.index[i],feature]) for i in selection_stream.index]
        if len(images_list)>0:
            %run -i visorOk.py --listImages $images_list --folder $dfolder --listIndex $selection_stream.index --listValues $images_values

def save_ind(bval):
        for el in selection_stream.index:
            indexes.add(el)
        print("Indices saved : "+str(indexes)) 
        return
    
def save_ind_randomly(bval):
        cells_range = np.min([len(selection_stream.index),cells_random])
        for el in range(cells_range): 
            index_random = random.choice(selection_stream.index)
            indexes.add(index_random)
        print("Indices saved : "+str(indexes)) 
        return

def clear_indexes(bval):
        global indexes
        indexes = set()
        print("All indexes cleared.") 
        return
    
    
b = widgets.Button(
        description='Save indexes',
        disabled=False,
        tooltip='Selection is saved',
        )
b2 = widgets.Button(
        description='Show selected',
        disabled=False,
        tooltip='Show in viewer',
    )

b3 = widgets.Button(
        description='Add random',
        disabled=False,
        tooltip='Add randomly '+str(cells_random)+' cells from selected region',
    )

b4 = widgets.Button(
        description='Clear all indexes',
        disabled=False,
        tooltip='Clear all selections',
    )
    
    
b.on_click(save_ind)
b2.on_click(openVisor)
b3.on_click(save_ind_randomly)
b4.on_click(clear_indexes)
In [34]:
from ipywidgets import Button, HBox, VBox, ToggleButton, Layout
def show_selected_cells(show_all_selected = False):
    sel_cells = 3
    items = []
    items2 = []
    boxes = []
    i = 1
    for index in indexes:    
        real_ind = final_tmp.index[index]
        name = final_tmp.at[real_ind,'Gene']
        file = open(final_tmp.at[real_ind,'img_name_raw'], "rb")
        image = file.read()       
        items.append(ToggleButton(value = show_all_selected, icon='check', description=str(name+"_"+str(real_ind)), tooltip=str(name),layout=Layout(width='300px', height='50px')))
        items2.append(widgets.Image(value=image,format='png',layout=Layout(width='300px', height='300px')))
        if i%sel_cells == 0:
            boxes.append(VBox([HBox(items),HBox(items2)]))
            items = []
            items2 =[]
            i = 0
        i = i+1

    return display(VBox(boxes)), boxes
In [35]:
def save_selected_cells(boxes):
    print("You selected: ")
    to_save = {}
    for vb in boxes:
        for bSel in vb.children:
            for m_button in bSel.children :
                if m_button.value == True :
                    value = m_button.description
                    data= value.split('_')
                    treatment = data[0]
                    index = int(data[1])
                    if treatment not in to_save.keys():
                        to_save[treatment] = []
                    print(treatment+" "+str(index))
                    to_save[treatment].append(index)
    return to_save

Select by diffusion

COPB1, COPB2 and COPG1

In [36]:
import os
%gui qt
title = "Diffusion"
feature ="Diffuse"
indexes = set()
final_tmp = final[final['Gene'].isin(['COPG1','COPB2','COPB1'])]
mp, selection_stream = plotQC(final_tmp, feature, title, size= size_dot,jitter = separation_dots, factor_reduce=0.8)
  
display(widgets.HBox([b, b2, b3, b4]))
mp
Out[36]:
Indices saved : {0, 1, 2, 3, 4, 5}

Select cells with diffusion

In [37]:
d, boxes = show_selected_cells()
d
In [38]:
to_save = save_selected_cells(boxes)
You selected: 
COPG1 676
COPG1 677
COPB1 680
In [39]:
cell_indexes_final = to_save.copy()
In [40]:
cell_indexes_final.update(to_save)

Select by fragmentation

DNM1, DENND4C, SRSF1

In [41]:
%gui qt

title = "Fragmented"
feature ="Fragmented"

indexes = set()
final_tmp = final[final['Gene'].isin(['DNM1','DENND4C','SRSF1'])]
mp, selection_stream = plotQC(final_tmp, feature, title, size= size_dot,jitter = separation_dots, factor_reduce=0.8)

display(widgets.HBox([b, b2, b3, b4]))
mp
Out[41]:
Indices saved : {128, 2, 3, 5, 134, 9, 138, 12, 13, 15, 144, 22, 23, 27, 32, 36, 39, 42, 45, 49, 50, 51, 68, 70, 72, 73, 87, 113, 116, 118, 120, 124, 125, 127}
In [42]:
d, boxes = show_selected_cells()
d
In [43]:
to_save = save_selected_cells(boxes)
You selected: 
DENND4C 656
DNM1 71
DENND4C 666
DNM1 82
DENND4C 672
DNM1 91
DNM1 105
DNM1 111
DNM1 114
SRSF1 139
SRSF1 141
SRSF1 156
DENND4C 653
In [44]:
cell_indexes_final.update(to_save)
cell_indexes_final
Out[44]:
{'COPG1': [676, 677],
 'COPB1': [680],
 'DENND4C': [656, 666, 672, 653],
 'DNM1': [71, 82, 91, 105, 111, 114],
 'SRSF1': [139, 141, 156]}
In [45]:
cell_indexes_final
Out[45]:
{'COPG1': [676, 677],
 'COPB1': [680],
 'DENND4C': [656, 666, 672, 653],
 'DNM1': [71, 82, 91, 105, 111, 114],
 'SRSF1': [139, 141, 156]}

Select by tubular shape (attention! relation is inverse)

ARHGAP44, FAM177B, IPO8, C1S

In [46]:
%gui qt

title = "Tubular"
feature ="Tubular"

indexes = set()
final_tmp = final[final['Gene'].isin(['ARHGAP44','FAM177B','IPO8','C1S'])]
mp, selection_stream = plotQC(final_tmp, feature, title, size= size_dot,jitter = separation_dots, factor_reduce=0.8)

display(widgets.HBox([b, b2, b3, b4]))
mp
Out[46]:
Indices saved : set()
Indices saved : set()
All indexes cleared.
Indices saved : {129, 130, 2, 3, 133, 134, 135, 5, 137, 138, 139, 140, 141, 142, 143, 15, 9, 146, 16, 148, 20, 19, 155, 156, 28, 160, 161, 162, 34, 7, 165, 38, 167, 8, 174, 176, 177, 49, 179, 180, 48, 182, 183, 55, 50, 10, 70, 71, 75, 76, 78, 79, 81, 82, 83, 85, 89, 97, 98, 99, 100, 101, 102, 103, 106, 107, 108, 114, 117, 120, 121, 122, 124, 125, 126}
Indices saved : {129, 130, 2, 3, 133, 134, 135, 5, 137, 138, 139, 140, 141, 142, 143, 15, 9, 146, 16, 148, 20, 19, 155, 156, 28, 160, 161, 162, 34, 7, 165, 38, 167, 8, 174, 176, 177, 49, 179, 180, 48, 182, 183, 55, 50, 10, 70, 71, 73, 75, 76, 78, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 97, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 114, 117, 120, 121, 122, 124, 125, 126}
In [52]:
d, boxes = show_selected_cells()
d
In [55]:
to_save = save_selected_cells(boxes)
You selected: 
IPO8 422
IPO8 427
IPO8 429
IPO8 445
In [56]:
cell_indexes_final.update(to_save)
cell_indexes_final
Out[56]:
{'COPG1': [676, 677],
 'COPB1': [680],
 'DENND4C': [656, 666, 672, 653],
 'DNM1': [71, 82, 91, 105, 111, 114],
 'SRSF1': [139, 141, 156],
 'ARHGAP44': [524, 528, 511],
 'C1S': [346, 356, 350, 361, 375, 390, 351],
 'FAM177B': [608, 615, 616, 640, 642],
 'IPO8': [422, 427, 429, 445]}

Select by condensation

WDR75, PTBP1, ACTR3, NT5C, GPT and don't forget some negative controls (Neg 9)(Select all of them and apply Add random)

In [57]:
%gui qt

title = "Condensed"
feature ="Condensed"

indexes = set()
final_tmp = final[final['Gene'].isin(['WDR75', 'PTBP1', 'ACTR3', 'NT5C', 'GPT','Neg9'])]
mp, selection_stream = plotQC(final_tmp, feature, title, size= size_dot,jitter = separation_dots, factor_reduce=0.8)

display(widgets.HBox([b, b2, b3, b4]))
mp
Out[57]:
Indices saved : {96, 98, 68, 69, 102, 71, 136, 105, 72, 111, 145, 115, 118, 153, 157, 95, 159}
Indices saved : {0, 1, 4, 136, 8, 10, 11, 12, 13, 14, 15, 16, 145, 17, 19, 18, 21, 22, 23, 24, 153, 25, 20, 26, 157, 30, 159, 39, 40, 41, 43, 44, 45, 52, 61, 66, 67, 68, 69, 71, 72, 95, 96, 98, 102, 105, 111, 115, 118}
Indices saved : {0, 1, 4, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 39, 40, 41, 43, 44, 45, 52, 61, 66, 67, 68, 69, 71, 72, 95, 96, 98, 102, 105, 111, 115, 118, 136, 145, 153, 157, 159, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 187, 188, 189, 190, 191, 192, 193, 195, 196, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, 225, 226, 228, 229, 230, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 283, 284, 286, 288, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342}
All indexes cleared.
Indices saved : {224, 225, 226, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 283, 284, 286, 288, 289, 290, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342}
In [61]:
d, boxes = show_selected_cells()
d
In [62]:
to_save = save_selected_cells(boxes)
You selected: 
NT5C 462
NT5C 466
NT5C 475
GPT 544
GPT 549
PTBP1 555
PTBP1 572
PTBP1 583
PTBP1 599
In [63]:
cell_indexes_final.update(to_save)
cell_indexes_final
Out[63]:
{'COPG1': [676, 677],
 'COPB1': [680],
 'DENND4C': [656, 666, 672, 653],
 'DNM1': [71, 82, 91, 105, 111, 114],
 'SRSF1': [139, 141, 156],
 'ARHGAP44': [524, 528, 511],
 'C1S': [346, 356, 350, 361, 375, 390, 351],
 'FAM177B': [608, 615, 616, 640, 642],
 'IPO8': [422, 427, 429, 445],
 'WDR75': [20, 31, 46, 67],
 'Neg9': [186, 213, 232, 262],
 'ACTR3': [282, 297, 308, 312, 315, 318, 322, 330],
 'NT5C': [462, 466, 475],
 'GPT': [544, 549],
 'PTBP1': [555, 572, 583, 599]}

PART 5 : Confirm cells of interest

Show final selection images and discard non wanted

In [64]:
inds = []
for key, value in cell_indexes_final.items():
    inds = inds+value

final_stage = final.loc[inds,:]
In [65]:
from scipy.spatial import KDTree

def listOfClosest(list_sem, radius = 100):
        """
         Gives back the indices of elements to be removed

        Notice that this method requires some sophistication.
        In this approach we just leave the first element we find.
        :param m_list_px:
        :param m_list_py:
        :param radius:
        :return:
        """
        cp_list = list_sem.copy()
        # for the tree
        ncp_list = list_sem.copy()
        ncp_list_x = list(ncp_list['Location_Center_X'])
        ncp_list_y = list(ncp_list['Location_Center_Y'])
        tree_list = list(zip(ncp_list_x, ncp_list_y))
        list_excluded = []
        for mindex,row in cp_list.iterrows():
            el = np.array((row['Location_Center_X'],row['Location_Center_Y']),dtype=np.float32)
            distances_p, indexes =  KDTree(tree_list).query(el,k=2) # closest element that is not yourself
            if( distances_p[1] < radius):
                list_excluded.append(mindex)
                ncp_list = ncp_list.drop(df.index[[mindex]])
                ncp_list_x = ncp_list['Location_Center_X']
                ncp_list_y = ncp_list['Location_Center_Y']
                tree_list = list(zip(ncp_list_x, ncp_list_y))
                if(len(tree_list)<2):
                    break

        return list_excluded
In [66]:
df_points = final_stage[['Location_Center_X','Location_Center_Y']]
list_ex = listOfClosest(df_points)
In [67]:
len(list_ex)
Out[67]:
44
In [68]:
from ipywidgets import Button, HBox, VBox, ToggleButton, Layout
def show_selected_cells_excluded(mindexes):
    sel_cells = 3
    items = []
    items2 = []
    boxes = []
    i = 1
    for index in range(len(final_stage)): 
        real_ind = final_stage.index[index]
        name = final_stage.at[real_ind,'Gene']
        file = open(final_stage.at[real_ind,'img_name_raw'], "rb")
        image = file.read() 
        if real_ind in mindexes:
            items.append(ToggleButton(value = False, button_style='warning',icon='check', description=str(name+"_"+str(real_ind)), tooltip=str(name),layout=Layout(width='300px', height='50px')))
        else:
            items.append(ToggleButton(value = True, button_style='success',icon='check', description=str(name+"_"+str(real_ind)), tooltip=str(name),layout=Layout(width='300px', height='50px')))
        items2.append(widgets.Image(value=image,format='png',layout=Layout(width='300px', height='300px')))
        if i%sel_cells == 0:
            boxes.append(VBox([HBox(items),HBox(items2)]))
            items = []
            items2 =[]
            i = 0
        i = i+1

    return display(VBox(boxes)), boxes
In [69]:
d, boxes = show_selected_cells_excluded(list_ex)
d
In [71]:
final_saving  = save_selected_cells(boxes)
You selected: 
COPG1 676
COPG1 677
COPB1 680
DENND4C 656
DENND4C 666
DENND4C 672
DENND4C 653
DNM1 71
DNM1 82
DNM1 91
DNM1 105
DNM1 111
DNM1 114
SRSF1 139
SRSF1 141
SRSF1 156
ARHGAP44 524
ARHGAP44 528
ARHGAP44 511
C1S 346
C1S 356
C1S 350
C1S 361
C1S 375
C1S 390
C1S 351
FAM177B 608
FAM177B 615
FAM177B 616
FAM177B 640
FAM177B 642
IPO8 422
IPO8 427
IPO8 429
IPO8 445
WDR75 20
WDR75 31
WDR75 46
WDR75 67
Neg9 186
Neg9 213
Neg9 232
Neg9 262
ACTR3 282
ACTR3 297
ACTR3 308
ACTR3 312
ACTR3 315
ACTR3 318
ACTR3 322
ACTR3 330
NT5C 462
NT5C 466
NT5C 475
GPT 544
GPT 549
PTBP1 555
PTBP1 572
PTBP1 583
PTBP1 599
In [72]:
inds = []
for key, value in final_saving.items():
    inds = inds+value

final_df = final.loc[inds,:]
In [73]:
len(final_df)
Out[73]:
60
In [ ]:
final_df

PART 5 : Save file

In [74]:
from IPython.core.display import HTML

display(HTML(final_df.to_html()))
#hv.Div(final.to_html())
Tubular Diffuse Fragmented Condensed Nuc_Solidity Gene Metadata_BaseFileName FileName_ColorImage Location_Center_X Location_Center_Y Mean_Golgi_AreaShape_Center_X Mean_Golgi_AreaShape_Center_Y Mean_Nuclei_AreaShape_Solidity Metadata_U Metadata_V Metadata_X Metadata_Y ImageQuality_PowerLogLogSlope_Dna Intensity_IntegratedIntensity_GolgiBGCorr Mean_Nuclei_Math_CV Math_Blobness Math_Diffuseness Children_Golgi_Count Mean_MaxAreaGolgi_AreaShape_FormFactor img_name img_name_raw
676 0.370423 8923.823649 -0.799965 1.179674 0.014045 COPG1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 334.286611 24.208393 337.000000 4.000000 0.955189 0 0 2 3 -1.957673 54.722154 0.252751 0.652426 0.950535 2 0.575876 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
677 -2.890163 4662.065168 2.004732 1.142682 -0.095766 COPG1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 167.616181 208.297742 163.500000 205.750000 0.951456 0 0 2 3 -1.957673 243.935688 0.196583 0.331752 0.496582 8 0.570112 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
680 -0.725418 0.102062 -1.267415 3.165676 -0.265957 COPB1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 60.603237 598.058607 57.000000 580.000000 0.945672 0 0 2 24 -1.135965 -226.510209 0.216838 0.544652 0.000000 1 0.885326 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
656 0.044757 0.102062 0.602383 -0.622219 -4.365804 DENND4C image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 522.884780 377.314977 515.000000 362.600000 0.806321 0 0 2 5 -2.074976 -324.458649 0.155898 0.620397 0.000000 5 0.295113 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
666 -1.447371 0.102062 0.602383 0.498163 0.250785 DENND4C image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 494.421955 63.994568 480.000000 55.000000 0.963235 0 0 3 5 -1.803710 -231.957271 0.249002 0.473648 0.000000 5 0.469686 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
672 -1.056123 0.102062 0.134934 -0.668359 0.466747 DENND4C image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 575.933196 294.382539 547.750000 297.000000 0.970576 0 0 3 5 -1.803710 -452.046893 0.173552 0.512127 0.000000 4 0.287924 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
653 -0.546251 0.102062 0.602383 -0.760092 0.239706 DENND4C image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 316.371970 124.508583 305.400000 105.800000 0.962859 0 0 2 5 -2.074976 -390.954731 0.284004 0.562272 0.000000 5 0.273630 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
71 1.532830 0.102062 0.134934 3.269439 -0.295866 DNM1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 154.260342 410.705083 152.750000 415.250000 0.944655 0 0 0 2 -2.015333 -84.066871 0.197918 0.766747 0.000000 4 0.901494 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
82 -0.674709 5395.870496 1.069833 -0.451984 0.118565 DNM1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 647.946276 638.325397 653.000000 649.000000 0.958741 0 0 1 2 -2.058092 446.261577 0.194684 0.549639 0.574745 6 0.321639 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
91 0.155880 0.102062 1.069833 2.493585 -0.089754 DNM1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 121.225285 524.350606 110.166667 518.666667 0.951661 0 0 1 12 -2.053237 -358.921200 0.237541 0.631326 0.000000 6 0.780604 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
105 -0.031257 0.102062 1.537282 0.507017 -9.298871 DNM1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 42.215535 34.010959 38.714286 13.000000 0.638650 0 0 2 12 -1.856715 -318.960610 0.146658 0.612921 0.000000 7 0.471066 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
111 -0.836830 0.102062 1.069833 0.480819 0.434545 DNM1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 357.155615 261.034423 338.833333 274.166667 0.969481 0 0 3 2 -2.028408 -94.128637 0.205118 0.533694 0.000000 6 0.466984 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
114 -0.631382 7103.894095 0.134934 -0.751119 0.301631 DNM1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 549.863060 289.403400 545.750000 307.000000 0.964964 0 0 3 2 -2.028408 23.527446 0.182013 0.553900 0.756680 4 0.275029 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
139 -1.428377 2593.979282 0.602383 0.170837 0.094181 SRSF1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 589.237201 594.840215 588.000000 593.600000 0.957912 0 0 1 7 -1.842631 127.287054 0.223852 0.475516 0.276294 5 0.418684 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
141 0.356080 0.102062 0.134934 -0.857018 -1.503067 SRSF1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 96.558812 160.264946 79.500000 167.750000 0.903623 0 0 1 18 -1.845404 -342.738846 0.183130 0.651015 0.000000 4 0.258528 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
156 -2.556341 0.102062 0.602383 -0.303032 0.352499 SRSF1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 414.689991 426.783062 414.800000 426.400000 0.966692 0 0 2 18 -1.829111 -275.471392 0.210986 0.364582 0.000000 5 0.344848 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
524 -0.798015 0.102062 -0.799965 -1.111818 0.521662 ARHGAP44 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 235.939750 596.478922 247.500000 602.000000 0.972442 0 0 2 15 -1.872665 -323.390806 0.203283 0.537512 0.000000 2 0.218826 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
528 -2.676076 0.102062 0.134934 0.306441 0.428650 ARHGAP44 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 504.536892 184.212202 504.000000 173.250000 0.969281 0 0 3 15 -2.004200 -342.399043 0.180776 0.352807 0.000000 4 0.439813 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
511 -1.509626 0.102062 0.602383 -1.161612 0.586760 ARHGAP44 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 533.311038 636.677695 522.400000 647.200000 0.974655 0 0 1 25 -1.897248 -442.068266 0.243507 0.467526 0.000000 5 0.211067 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
346 -0.256838 0.102062 0.134934 -0.870226 0.244451 C1S image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 225.870797 621.897695 209.000000 620.250000 0.963020 0 0 0 19 -1.835737 -416.347870 0.201794 0.590736 0.000000 4 0.256470 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
356 -0.410011 0.102062 -0.799965 -0.859336 -1.682816 C1S image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 189.507684 134.688438 207.000000 129.000000 0.897514 0 0 1 19 -1.765055 -343.124338 0.176559 0.575671 0.000000 2 0.258167 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
350 -1.698049 0.102062 0.602383 0.556525 0.325084 C1S image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 349.658404 435.862152 352.600000 428.600000 0.965761 0 0 1 4 -2.087126 -336.815315 0.213816 0.448994 0.000000 5 0.478780 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
361 -1.337159 0.102062 -0.332516 -0.373944 0.058582 C1S image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 449.613139 293.381483 438.000000 286.000000 0.956702 0 0 1 19 -1.765055 -329.936102 0.179488 0.484488 0.000000 3 0.333798 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
375 -2.192531 0.102062 0.134934 -1.278534 0.398918 C1S image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 409.789503 349.786942 408.750000 347.250000 0.968270 0 0 2 4 -1.812365 -372.378847 0.218985 0.400363 0.000000 4 0.192849 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
390 -0.285195 0.102062 -0.332516 -0.975908 0.243413 C1S image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 268.126645 586.012647 266.000000 566.000000 0.962985 0 0 2 4 -1.812365 -391.809634 0.254356 0.587947 0.000000 3 0.240003 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
351 -2.023516 0.102062 0.134934 -0.559746 0.344866 C1S image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 222.520842 462.635147 204.500000 457.000000 0.966433 0 0 1 4 -2.087126 -309.949431 0.238109 0.416985 0.000000 4 0.304848 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
608 -0.922777 0.102062 -0.799965 -1.032204 0.039991 FAM177B image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 395.367098 335.989279 394.500000 337.000000 0.956071 0 0 1 23 -1.913354 -307.233356 0.203349 0.525241 0.000000 2 0.231231 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
615 -1.826050 0.102062 0.134934 -0.992127 0.468035 FAM177B image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 416.431870 524.157456 423.750000 530.000000 0.970619 0 0 1 23 -1.913354 -305.403159 0.228027 0.436406 0.000000 4 0.237476 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
616 -1.680527 0.102062 0.134934 -1.063049 0.275910 FAM177B image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 267.384293 599.731050 271.750000 578.250000 0.964089 0 0 1 23 -1.913354 -310.320023 0.213630 0.450718 0.000000 4 0.226425 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
640 -0.872817 0.102062 0.602383 -0.273817 0.086245 FAM177B image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 79.121446 290.012987 78.800000 285.400000 0.957643 0 0 2 23 -1.918757 -353.545516 0.196224 0.530155 0.000000 5 0.349400 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
642 -0.773841 0.102062 0.134934 0.571000 0.400382 FAM177B image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 73.519670 433.455039 77.000000 447.750000 0.968320 0 0 2 23 -1.918757 -346.118063 0.168141 0.539889 0.000000 4 0.481035 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
422 -0.394769 0.102062 -0.799965 -0.677590 -1.040225 IPO8 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 495.396867 331.554067 481.000000 347.000000 0.919355 0 0 2 6 -1.780521 -166.349227 0.184931 0.577170 0.000000 2 0.286486 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
427 0.111129 0.102062 0.134934 -0.595969 0.417481 IPO8 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 622.040600 113.189971 602.750000 116.000000 0.968901 0 0 2 20 -1.863840 -438.760618 0.208862 0.626925 0.000000 4 0.299203 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
429 0.110297 0.102062 -1.267415 -0.965860 0.568993 IPO8 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 308.156566 171.624579 317.000000 202.000000 0.974051 0 0 2 20 -1.863840 -407.326695 0.240032 0.626843 0.000000 1 0.241569 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
445 0.061201 0.102062 -0.332516 -0.272351 0.491011 IPO8 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 557.577456 321.993860 576.000000 318.666667 0.971400 0 0 3 20 -1.900497 -434.727088 0.200305 0.622015 0.000000 3 0.349628 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
20 -1.800822 6537.617227 -0.332516 2.024919 0.038905 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 450.667375 348.510623 463.333333 344.333333 0.956034 0 0 1 1 -1.996173 523.061963 0.228762 0.438887 0.696362 3 0.707579 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
31 1.784605 0.102062 -1.267415 1.179049 -0.296406 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 104.049576 73.843548 129.000000 91.000000 0.944637 0 0 1 21 -1.824926 -225.522762 0.175633 0.791509 0.000000 1 0.575779 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
46 1.059722 2263.654466 0.134934 1.153408 0.425063 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 94.725538 308.908258 104.750000 303.000000 0.969159 0 0 2 1 -1.848040 168.100189 0.311841 0.720218 0.241109 4 0.571784 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
67 1.562947 0.102062 -1.267415 1.429281 -1.295460 WDR75 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 54.203557 578.430830 47.000000 562.000000 0.910680 0 0 3 21 -1.812387 -266.503157 0.204910 0.769709 0.000000 1 0.614769 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
186 0.295781 0.102062 1.537282 0.326000 0.389984 Neg9 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 227.099381 67.390575 224.571429 71.285714 0.967967 0 0 0 8 -1.615603 -392.431205 0.204554 0.645085 0.000000 7 0.442861 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
213 1.320084 0.102062 -1.267415 -0.556839 0.672451 Neg9 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 375.164091 342.286176 402.000000 370.000000 0.977567 0 0 1 16 -1.971309 -447.561208 0.233838 0.745824 0.000000 1 0.305301 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
232 0.551397 0.102062 -1.267415 -0.291546 0.383881 Neg9 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 550.832054 380.356968 570.000000 366.000000 0.967759 0 0 2 8 -1.883340 -411.360615 0.192257 0.670225 0.000000 1 0.346637 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
262 -1.553596 0.102062 1.069833 -0.832559 0.476760 Neg9 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 433.848038 376.352578 430.000000 373.833333 0.970916 0 0 2 26 -1.935263 -381.047673 0.193369 0.463201 0.000000 6 0.262339 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
282 1.606828 0.102062 -0.799965 0.754537 -0.797500 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 142.669241 108.203714 130.000000 82.000000 0.927605 0 0 0 10 -1.797313 -327.972769 0.152276 0.774025 0.000000 2 0.509633 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
297 2.164041 0.102062 -1.267415 2.054374 -0.978438 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 169.543850 630.192778 154.000000 635.000000 0.921455 0 0 0 17 -1.881625 -242.317075 0.172628 0.828826 0.000000 1 0.712168 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
308 1.805904 0.102062 -1.267415 0.747408 0.452043 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 573.835274 306.667331 579.000000 327.000000 0.970076 0 0 2 10 -1.979468 -405.238069 0.235232 0.793604 0.000000 1 0.508522 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
312 1.636194 0.102062 -1.267415 1.084835 0.427637 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 433.079602 389.277214 401.000000 378.000000 0.969246 0 0 2 10 -1.979468 -318.077474 0.188405 0.776913 0.000000 1 0.561099 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
315 0.973484 0.102062 -0.799965 2.307607 0.294051 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 520.352451 422.074792 519.000000 419.500000 0.964706 0 0 2 10 -1.979468 -334.976298 0.194828 0.711736 0.000000 2 0.751626 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
318 2.001239 0.102062 -1.267415 1.881240 -0.229844 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 37.682775 354.999778 47.000000 369.000000 0.946899 0 0 2 17 -1.747835 -294.539039 0.198337 0.812815 0.000000 1 0.685191 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
322 1.138626 0.102062 -1.267415 0.480307 -2.844134 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 596.205291 76.486984 622.000000 83.000000 0.858041 0 0 3 10 -1.957299 -310.093158 0.170996 0.727978 0.000000 1 0.466904 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
330 1.668161 0.102062 -1.267415 1.845215 0.114747 ACTR3 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 341.410751 324.659071 356.000000 307.000000 0.958611 0 0 3 10 -1.957299 -227.862172 0.253283 0.780057 0.000000 1 0.679578 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
462 0.600190 0.102062 -0.332516 2.014299 0.287220 NT5C image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 573.192210 290.230978 576.666667 268.666667 0.964474 0 0 1 22 -1.963019 -329.560808 0.201697 0.675023 0.000000 3 0.705924 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
466 1.286412 0.102062 -1.267415 0.965521 0.390852 NT5C image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 457.818682 380.071393 441.000000 392.000000 0.967996 0 0 1 22 -1.963019 -349.193163 0.249079 0.742512 0.000000 1 0.542508 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
475 1.644035 0.102062 0.602383 1.732810 -1.295531 NT5C image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 615.314838 91.228113 630.000000 98.000000 0.910677 0 0 2 13 -1.885950 -304.394923 0.163921 0.777684 0.000000 5 0.662063 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
544 1.562996 0.102062 -1.267415 0.419616 0.267643 GPT image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 177.658642 500.312073 200.000000 491.000000 0.963808 0 0 0 27 -1.928436 -354.014535 0.193908 0.769714 0.000000 1 0.457447 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
549 1.438931 0.102062 -1.267415 0.385189 -7.162677 GPT image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 86.144024 124.573437 73.000000 105.000000 0.711257 0 0 3 29 -1.834695 -271.544530 0.152245 0.757513 0.000000 1 0.452083 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
555 1.408067 0.102062 -1.267415 2.061455 0.253429 PTBP1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 472.871892 197.104384 494.000000 177.000000 0.963325 0 0 1 11 -1.988586 -348.304141 0.239991 0.754477 0.000000 1 0.713271 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
572 0.998622 0.102062 -1.267415 -0.614691 0.300493 PTBP1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 314.429130 647.104565 319.000000 626.000000 0.964925 0 0 1 11 -1.988586 -288.007863 0.259826 0.714209 0.000000 1 0.296286 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
583 0.184151 0.102062 -0.799965 1.376900 -0.527336 PTBP1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 607.969960 137.934124 608.000000 138.500000 0.936788 0 0 3 11 -1.953004 -243.220605 0.252601 0.634106 0.000000 2 0.606607 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
599 0.898489 0.102062 -0.799965 -0.200131 0.456994 PTBP1 image--L0000--S00--U00--V00--J07--E00--O01--X0... image--L0000--S00--U00--V00--J07--E00--O01--X0... 53.310068 380.796882 46.500000 367.000000 0.970244 0 0 3 14 -1.669445 -432.666109 0.242287 0.704361 0.000000 2 0.360881 Z:\lleti\AUTOCLEM\19112018_automation_spots\cr... ./crops/image--L0000--S00--U00--V00--J07--E00-...
In [75]:
final_df.to_csv('selected_cells.csv')
In [76]:
save_images(final_df)

Save in folder

Remember to save as .html or PDF/Latex in File->Download as...

END